home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 10 / 9 / DISK1095.ZIP / RAWMNT.PRG < prev    next >
Text File  |  1986-10-07  |  8KB  |  234 lines

  1. *
  2. * RAWMNT
  3. * RAW MATERIALS INVENTORY FILE MAINTENANCE
  4. * FILE STRUCTURE MUST ALREADY EXIST
  5. SET HEADING OFF
  6. SET SAFETY OFF
  7. SET STATUS OFF
  8. CLEAR
  9. CLEAR ALL
  10. SET TALK OFF
  11. SET BELL OFF
  12. * DEFINE A STRING OF BLANKS
  13. STORE SPACE(80) TO BLANK
  14. * CLEAR REQUEST AND ACTION CONTROL VARIABLES
  15. STORE " " TO REQUEST
  16. STORE " " TO ACTION
  17. STORE "N" TO DATAIN
  18. STORE 0 TO RECCNT
  19. *
  20. *===============================START MODS: 1================================*
  21. * SET NAME OF FILE                                                           *
  22. STORE "RAWINV" TO FILENAME
  23. * SETUP COUNT OF INDEXES FOR THE FILE filename
  24. STORE 1 TO IXCOUNT
  25. * SETUP CONSTANTS CONTAINING INDEXES IN SEQUENCE TO USE IN MACRO LATER.
  26. * LIST EACH INDEX FIRST AS A PRIMARY INDEX. VARIABLES NAMED IXA, IXB, IXC, ETC.
  27. STORE "RSTOCKNO" TO IXA
  28. * DEFINE KEYS FOR INDEX. IF NUMERIC, MUST CONVERT WITH STR(). USE DI+IXA, ETC.
  29. STORE "STOCKNO" TO DIIXA
  30. *==================================END MODS==================================*
  31. *
  32. * SAVE NAME OF MACRO WHICH CONTAINS ACTIVE INDEX AS FIRST INDEX
  33. STORE "IXA" TO LIVE_IX
  34. * FIND RECORD COUNT
  35. USE &FILENAME
  36. COUNT TO RECCNT
  37. * IF DBF FILE IS EMPTY, 'IF STATEMENT' WILL PREVENT 'RECORD OUT OF RANGE'
  38. * ERROR FROM OCCURING WHEN <A>dd OPTION OF SUBMENU IS CHOSEN.
  39. IF RECCNT = 1
  40.    RECCNT = RECCNT-1
  41. ENDIF
  42. * IF FILE IS EMPTY, ASSUME INDEXES NOT CREATED AND CREATE THEM.
  43.   IF RECCNT = 0 .AND. IXCOUNT>0
  44.    STORE 1 TO COUNT
  45.    DO WHILE COUNT<=IXCOUNT
  46.       STORE "IX"+CHR(64+COUNT) TO TEMP
  47.       STORE "DI"+TEMP TO TEMP2
  48.       IF IXCOUNT>1
  49.          STORE SUBSTR(&TEMP,1,AT(",",&TEMP)-1) TO TEMP
  50.       ELSE
  51.          STORE &TEMP TO TEMP
  52.       ENDIF
  53.       STORE &TEMP2 TO TEMP2
  54.       INDEX ON &TEMP2 TO &TEMP
  55.       STORE COUNT+1 TO COUNT
  56.    ENDDO
  57.   ENDIF
  58. * ADD INDEXES
  59. SET INDEX TO &IXA
  60. * POSITION AT FIRST RECORD IN LIVE INDEX SEQUENCE FOR INITIAL DISPLAY
  61. GO TOP
  62. *
  63. * MAIN UPDATE LOOP. TERMINATED BY 'M' AS REQUEST
  64. DO WHILE REQUEST<>"M"
  65. *
  66. *===============================START MODS: 2================================*
  67. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  68.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  69.    @ 3,14 SAY ">> Raw Materials Inventory System File Maintenance <<"
  70.    @ 5,17 SAY "Today's Date:"
  71.    ?? DATE()
  72. * SETUP VARIABLE PART OF MASK
  73.    CLEAR GETS
  74.    @ 7,1  SAY "Stock Number " GET STOCKNO
  75.    @ 7,40 SAY "Description " GET DESCRIPT
  76.    @ 9,1  SAY "Vendor -- Primary " GET VENDOR1
  77.    @ 9,40 SAY "Secondary " GET VENDOR2
  78.    @ 11,1  SAY "Units Per Package " GET UNITS_PKG
  79.    @ 11,40 SAY "Cost Per Package " GET PKG_PRICE
  80.    @ 13,1 SAY "Packages -- On Hand " GET PK_ON_HAND
  81.    @ 13,30 SAY "On Order " GET PK_ON_ORDR
  82.    @ 13,50 SAY "Reorder Point " GET REORDER_PT
  83.    @ 15,1 SAY "Order Lead Time " GET LEAD_WKS
  84. * DATE OF LAST UPDATE SHOULD BE ONE OF THE FIELDS (LAST_UPDT)
  85.    @ 17,1 SAY "Last Updated : "
  86.    ?? LAST_UPDT
  87. *==================================END MODS==================================*
  88. *
  89. * DISPLAY VARIABLE DATA IN SCREEN HEADING
  90.    IF DELETE()
  91.       @ 5,1 SAY "* DELETED *"
  92.    ELSE
  93.       @ 5,1 SAY "           "
  94.    ENDIF
  95. * IDENTIFY RECORD
  96.    @ 5,62 SAY RECCNT
  97.    @ 5,50 SAY RECNO()
  98.    @ 5,43 SAY "Record"
  99.    @ 5,61 SAY "of"
  100. * IF DATAIN FLAG SET, ACTIVATE THE GETS
  101.    IF DATAIN="Y"
  102.       @ 19,72 GET ACTION
  103.       READ
  104. * DATE STAMP RECORD
  105.       REPLACE LAST_UPDT WITH DATE()
  106.       IF REQUEST="E".OR.ACTION<>"C"
  107.          STORE "N" TO DATAIN
  108.          STORE " " TO REQUEST
  109.          STORE " " TO ACTION
  110.       ENDIF 2
  111.    ELSE
  112.       CLEAR GETS
  113.    ENDIF 1
  114. *
  115. * DISPLAY CONTROL SUBMENU, CURRENT ACTIVE INDEX
  116.    @ 19,0 SAY BLANK
  117.    @ 20,0 SAY "----------------------------------------"
  118.    @ 20,40 SAY "----------------------------------------"
  119.    @ 21,0 CLEAR
  120.    @ 21,2 SAY ;
  121. "<F>ind Record  <A>dd Record   <D>elete/Recall  <E>dit Record   Current Active"
  122.    @ 22,2 SAY ;
  123. "<P>rev Record  <N>ext Record  <M>enu (return)  <K>ey Select    Key:          "
  124. * IF INDEX SET NAMED IN LIVE_IX HAS MULTIPLE ENTRIES, EXTRACT FIRST
  125.    IF (","$&LIVE_IX)
  126.       STORE SUBSTR(&LIVE_IX,1,AT(",",&LIVE_IX)-1) TO TEMP
  127.       @ 22,70 SAY TEMP
  128.    ELSE
  129.       @ 22,70 SAY &LIVE_IX
  130.    ENDIF
  131. * GET REQUEST AND FORCE TO UPPER CASE UNLESS ALREADY IN 'A' FOR ADD RECORDS
  132.    IF REQUEST<>"A"
  133.       STORE " " TO REQUEST
  134.       STORE " " TO ACTION
  135.       @ 23,10 SAY "          *** NEXT ACTION TO PERFORM " GET REQUEST
  136.       READ
  137.       STORE UPPER(REQUEST) TO REQUEST
  138.    ENDIF
  139. * CLEAR ADD RECORD COMMAND LINE, SUBMENU AREA
  140.    @ 21,0 CLEAR 
  141.    DO CASE
  142. * ADD NEW CASE OR EDIT DISPLAYED CASE
  143.       CASE REQUEST="A".OR.REQUEST="E"
  144. * IN ADD MODE, APPEND A BLANK RECORD FOR THE DATA AND POSITION TO THAT RECORD
  145.          IF REQUEST="A"
  146.             @ 19,6 SAY "*** PRESS 'C' TO CONTINUE ADDING NEW RECS, ANYTHING ;
  147. ELSE TO QUIT"
  148.             APPEND BLANK
  149.             STORE RECCNT+1 TO RECCNT
  150.             GO RECCNT
  151.          ELSE
  152.             @ 19,6 SAY "******** PRESS ANY KEY TO FINISH EDIT AND RETURN TO ;
  153. SUBMENU     "
  154.          ENDIF
  155.          @ 21,10 SAY "Enter data at cursor position. Move among fields with"
  156.          @ 22,10 SAY "cursor control keys. Press ENTER to move to next field."
  157.          @ 23,10 SAY "Press ENTER alone to leave field unchanged."
  158. * SET FLAG TO CAUSE NEW DATA TO BE READ
  159.          STORE "Y" TO DATAIN
  160. * TOGGLE DELETE FLAG. * FUNCTION CHECKS IF RECORD NOW FLAGGED AS DELETED
  161.       CASE REQUEST="D"
  162.          IF DELETE()
  163.             RECALL
  164.          ELSE
  165.             DELETE
  166.          ENDIF
  167. * PREVIOUS RECORD IN ACTIVE INDEX SEQUENCE
  168.       CASE REQUEST="P"
  169.          SKIP -1
  170.          IF BOF()
  171.             GO BOTTOM
  172.          ENDIF 
  173. * NEXT RECORD IN ACTIVE INDEX SEQUENCE
  174.       CASE REQUEST="N"
  175.          SKIP +1
  176.          IF EOF()
  177.             GO TOP
  178.          ENDIF
  179. * GET SEARCH VALUE FOR INDEXED SEARCH
  180.       CASE REQUEST="F"
  181. * USE MACRO DEFINING INDEX ENTRIES FROM DATA FIELDS
  182.          STORE "DI"+LIVE_IX TO IXDEF
  183.          STORE &IXDEF TO SV
  184.          STORE &SV TO SV
  185.          @ 21,1 SAY ;
  186.          "ENTER SEARCH VALUE. VALUE SHOWN IS FROM THE DISPLAYED RECORD. PRESS"
  187.          @ 22,1 SAY "CTRL-Y TO CLEAR " GET SV
  188.          READ
  189. * REMOVE TRAILING BLANKS BEFORE SEARCH
  190.          STORE TRIM(SV) TO SEARCH
  191. * IF RECORD IS NOT FOUND DISPLAY STAYS AT CURRENT RECORD
  192.          STORE RECNO() TO NOW
  193.          SEEK SEARCH
  194.          IF EOF()
  195.             GOTO NOW
  196.          ENDIF
  197. * CHANGE INDEX
  198.       CASE REQUEST="K"
  199.          STORE RECNO() TO RECNOW
  200.          STORE " " TO IXCHOICE
  201. * SETUP MENU OF INDEX NAMES, PROVIDE IF CLAUSE FOR EACH INDEX                *
  202.          @ 21,9 SAY " "
  203.          STORE 1 TO COUNT
  204.          DO WHILE COUNT<=IXCOUNT
  205.             STORE "IX"+CHR(64+COUNT) TO TEMP
  206.             IF IXCOUNT>1
  207.                ?? CHR(64+COUNT)+". "+SUBSTR(&TEMP,1,AT(",",&TEMP)-1)+" "
  208.             ELSE
  209.                ?? CHR(64+COUNT)+". "+&TEMP
  210.             ENDIF
  211.             STORE COUNT+1 TO COUNT
  212.          ENDDO
  213.          @ 22,10 SAY "Press letter of desired key " GET IXCHOICE
  214.          READ
  215.          STORE UPPER(IXCHOICE) TO IXCHOICE
  216.          IF IXCHOICE>="A".AND.IXCHOICE<=CHR(64+IXCOUNT)
  217.             STORE "IX"+IXCHOICE TO LIVE_IX
  218.             STORE &LIVE_IX TO TEMP
  219.             SET INDEX TO &TEMP
  220.          ENDIF
  221. * GOTO THIS RECORD TO ACTIVATE INDEX
  222.          IF RECNOW>0
  223.             GO RECNOW
  224.          ELSE
  225.             GO BOTTOM
  226.          ENDIF
  227.    ENDCASE
  228. ENDDO
  229. * FALL OUT OF DO WHEN 'M' IS REQUEST, RETURN TO SUBSYSTEM'S MENU
  230. CLEAR
  231. RETURN
  232.  
  233.  
  234.